/* 
 * File:   AuthServiceTests.cpp
 * Author: nahuel
 *
 * Created on Jun 5, 2013, 10:14:51 PM
 */

#include <stdlib.h>
#include <iostream>
#include "server_AuthService.h"

// Debe existir en la DB
#define     USER_1_USERNAME     "roberto27"
#define     USER_1_PSW          "22123gk"

/*
 * Simple C++ Test Suite
 */


/* 
 *  Importante: 
 *  La db de usuarios debe estar en el path actual donde corre el test y llamarse "usersdb.xml"
 *  Se puede generar corriendo el test UsersDBTest.cpp, parando la ejecucion antes
 *  de eliminar los usuarios. 
 */

class MensajeroDummy : public IMensajero {
    void Responder (const string& pMensaje) throw (Excepcion&) {
        std::cout << pMensaje << std::endl;
    }
};



void testMensajeEntranteManejador() {
    IMensajero* pMensajero = new MensajeroDummy();
    
    string pMensaje = "AUTH_SERVICE";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += "AUTH_USER";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += std::string(USER_1_USERNAME);
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += std::string(USER_1_PSW);
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += MARCA_FIN_MENSAJE;
    
    Sesion dummy1(NULL);
    TP::Servicios::AuthService authService1(&dummy1);
    
    authService1.mensajeEntranteManejador(pMensajero, pMensaje);
    
    if (!dummy1.Autenticada() /*check result*/) {
        std::cout << "%TEST_FAILED% time=0 testname=testMensajeEntranteManejador (AuthServiceTests) message=error message sample" << std::endl;
    }
    
    // Este usuario no deberia existir en la DB ---> Error de autenticacion
    pMensaje = "AUTH_SERVICE";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += "AUTH_USER";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += std::string("sarasa");
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += std::string("sarasa123");
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += MARCA_FIN_MENSAJE;
    
    Sesion dummy2(NULL);
    TP::Servicios::AuthService authService2(&dummy2);
    
    authService2.mensajeEntranteManejador(pMensajero, pMensaje);
    
    if (dummy2.Autenticada() /*check result*/) {
        std::cout << "%TEST_FAILED% time=0 testname=testMensajeEntranteManejador (AuthServiceTests) message=error message sample" << std::endl;
    }
}

int main(int argc, char** argv) {
    std::cout << "%SUITE_STARTING% AuthServiceTests" << std::endl;
    std::cout << "%SUITE_STARTED%" << std::endl;

    std::cout << "%TEST_STARTED% testMensajeEntranteManejador (AuthServiceTests)" << std::endl;
    testMensajeEntranteManejador();
    std::cout << "%TEST_FINISHED% time=0 testMensajeEntranteManejador (AuthServiceTests)" << std::endl;

    std::cout << "%SUITE_FINISHED% time=0" << std::endl;

    return (EXIT_SUCCESS);
}

